package cn.iocoder.yudao.module.peizhen.service.paitent;

import cn.iocoder.yudao.module.peizhen.controller.admin.paitent.vo.PaitentPageReqVO;
import cn.iocoder.yudao.module.peizhen.dal.dataobject.staff.StaffDO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;
import cn.iocoder.yudao.module.peizhen.controller.app.paitent.vo.*;
import cn.iocoder.yudao.module.peizhen.dal.dataobject.paitent.PaitentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.peizhen.dal.mysql.paitent.PaitentMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.peizhen.enums.ErrorCodeConstants.*;

/**
 * 用户的陪诊病人 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class PaitentServiceImpl implements PaitentService {

    @Resource
    private PaitentMapper paitentMapper;

    @Override
    public Integer createPaitent(AppPaitentSaveReqVO createReqVO) {
        // 插入
        PaitentDO existPhonePaitent = paitentMapper.selectOne(PaitentDO::getPhone, createReqVO.getPhone());
        PaitentDO existCardPaitent = paitentMapper.selectOne(PaitentDO::getCardNum, createReqVO.getCardNum());
        if (existPhonePaitent!=null||existCardPaitent!=null){
            throw exception(PAITENT_EXISTS);
        }
        PaitentDO paitent = BeanUtils.toBean(createReqVO, PaitentDO.class);
        paitentMapper.insert(paitent);
        // 返回
        return paitent.getId();
    }

    @Override
    public void updatePaitent(AppPaitentSaveReqVO updateReqVO) {
        // 校验存在
        validatePaitentExists(updateReqVO.getId());
        // 更新
        PaitentDO updateObj = BeanUtils.toBean(updateReqVO, PaitentDO.class);
        paitentMapper.updateById(updateObj);
    }

    @Override
    public void deletePaitent(Integer id) {
        // 校验存在
        validatePaitentExists(id);
        // 删除
        paitentMapper.deleteById(id);
    }

    private void validatePaitentExists(Integer id) {
        if (paitentMapper.selectById(id) == null) {
            throw exception(PAITENT_NOT_EXISTS);
        }
    }

    @Override
    public PaitentDO getPaitent(Long id) {
        return paitentMapper.selectById(id);
    }

    @Override
    public PageResult<PaitentDO> getPaitentPage(AppPaitentPageReqVO pageReqVO) {
        return paitentMapper.selectPage(pageReqVO);
    }

    @Override
    public PageResult<PaitentDO> getPaitentPage(PaitentPageReqVO pageReqVO) {
        return paitentMapper.selectPage(pageReqVO);
    }

}